package com.example.mails;

import com.example.utils.BasicUtils;
import org.apache.commons.mail.DataSourceResolver;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.ImageHtmlEmail;
import org.apache.commons.mail.resolver.DataSourceCompositeResolver;
import org.apache.commons.mail.resolver.DataSourceFileResolver;
import org.apache.commons.mail.resolver.DataSourceUrlResolver;

import java.net.MalformedURLException;
import java.net.URL;

/**
 * 包含图片的邮件发送类
 * 该类用于处理包含图片的邮件发送逻辑
 */
public class ImgMail {
    public static void main(String[] args) {
        String title = "测试邮件";
        String content = "测试邮件，请忽略";
        String sender = "zhloveway@yeah.net";
        String password = "VISXBEDHEBEFGTZL";
        String[] toEmail = {"zh_sellers@yeah.net", "zh_sellers@aliyun.com"};
        String[] csEmail = {};// { "zh_sellers@yeah.net", "zh_sellers@aliyun.com" };
        String aPath = "G:\\01_9a5b111e-f775-4ac2-a985-8e1b9a026192.png";
        // String httpPath="";
        sendEmailImage(title, content, sender, password, toEmail, csEmail, aPath);
    }

    /**
     * 发送包含图片的电子邮件
     *
     * @param title    邮件标题
     * @param content  邮件正文内容
     * @param sender   发件人邮箱地址
     * @param password 发件人邮箱授权码或密码（取决于你的邮箱服务提供商设置）
     * @param toEmail  收件人邮箱地址数组
     * @param csEmail  抄送人邮箱地址数组
     * @param aPath    图片的附加路径，用于在邮件中引用图片
     */
    public static void sendEmailImage(String title, String content, String sender, String password, String[] toEmail,
                                      String[] csEmail, String aPath) {
        try {
            // 检查附件文件路径是否为空，如果为空则抛出异常
            if (BasicUtils.isEmptys(aPath) != false) {
                try {
                    throw new Exception("请设置附件文件路径");
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
            // 将图片路径嵌入到HTML内容中
            String htmlEmailContent = content + "<img src=\"" + aPath + "\"> ";
            // 创建ImageHtmlEmail实例，用于发送包含图片的HTML邮件
            ImageHtmlEmail email = new ImageHtmlEmail();
            // 设置邮件编码为UTF-8，避免乱码问题
            email.setCharset("UTF-8");
            // 设置SMTP服务器地址
            email.setHostName("smtp.yeah.net");
            // 设置发件人邮箱地址和密码，用于验证身份
            email.setAuthentication(sender, password);
            // 创建URL对象，这里留空，实际使用时应提供有效地址
            URL url = new URL("http://");

            // 定义数据源解析器数组，包括文件系统和URL两种数据源解析器
            DataSourceResolver[] dataSourceResolvers = new DataSourceResolver[]{new DataSourceFileResolver(),
                    new DataSourceUrlResolver(url)};
            // 设置复合数据源解析器，以便邮件可以解析不同来源的图片
            email.setDataSourceResolver(new DataSourceCompositeResolver(dataSourceResolvers));
            // 设置发件人邮箱地址
            email.setFrom(sender);

            // 检查收件人邮箱地址数组是否为空，如果不为空则设置收件人，如果为空则抛出异常
            if (BasicUtils.isEmptys(toEmail) != false) {
                email.addTo(toEmail);
                try {
                    throw new Exception("请设置收件人邮箱地址");
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
            // 检查抄送人邮箱地址数组是否为空，如果不为空则设置抄送人，如果为空则抛出异常
            if (BasicUtils.isEmptys(csEmail) != false) {
                email.addCc(toEmail);
                try {
                    throw new Exception("请设置抄送人邮箱地址");
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
            // 设置邮件标题
            email.setSubject(title);
            // 设置HTML格式的邮件内容
            email.setHtmlMsg(htmlEmailContent);
            // 设置备用的文本内容，用于不支持HTML格式的邮件客户端
            email.setTextMsg("你的邮箱客户端不支持HTML格式邮件");
            // 发送邮件
            email.send();
            System.out.println("邮件发送成功！");
        } catch (EmailException | MalformedURLException e) {
            e.printStackTrace();
            System.out.println("邮件发送失败！");
        }
    }
}
